변수와 입력 | ✅저자: 이유정(박사)
🔹 변수 만들기/사용하기
변수(variable)는 값을 저장해두고, 나중에 이름으로 꺼내서 사용합니다.
쉽게 말하면 "값에 붙이는 이름표"라고 생각하면 됩니다.
</> 예시코드: 변수 만들고 출력하기
name = "Eunice" # 이름 저장
age = 20 # 나이 저장
print("이름:", name)
print("나이:", age)
🖨️ 출력결과:
이름: Eunice
나이: 20
🔹 변수 사용 범위와 예시
✅ 1. 기본 자료형 담기
x = 10
y = 3.14
name = "Eunice"
is_valid = True
print(x, y, name, is_valid)
🖨️ 출력 결과:
10 3.14 Eunice True
🔍 해설:
- 변수는 숫자, 문자열, 불리언과 같은 기본 데이터를 담을 수 있습니다.
x
,y
,name
,is_valid
는 각각 정수, 실수, 문자열, 참/거짓 값
✅ 2. 컬렉션 자료형 담기
lst = [1, 2, 3]
tpl = (4, 5, 6)
dct = {"a": 1, "b": 2}
st = {1, 2, 3}
print(lst)
print(tpl)
print(dct)
print(st)
🖨️ 출력 결과:
[1, 2, 3]
(4, 5, 6)
{'a': 1, 'b': 2}
{1, 2, 3}
🔍 해설:
- 리스트, 튜플, 딕셔너리, 집합 등 복합 데이터도 변수에 저장 가능합니다.
📘 용어정리:
- 컬렉션(Collection): 여러 개의 값을 하나로 묶는 자료형의 총칭 (리스트, 튜플, 딕셔너리, 세트 모두 포함)
- 시퀀스(Sequence): 값들이 순서(index)를 가지고 있는 컬렉션 (리스트, 튜플, 문자열 등)
- 비시퀀스형: 순서 없음, 대신 키 기반 접근 또는 중복 불가 (딕셔너리, 집합 등)
✅ 3. 함수를 변수에 저장
def greet(name):
return f"Hello, {name}!"
say_hello = greet
print(say_hello("Eunice"))
🖨️ 출력 결과:
Hello, Eunice!
🔍 해설:
- 함수
greet
를say_hello
라는 변수에 저장해서 다른 이름으로 호출 가능 - 파이썬은 함수를 일급 객체로 다루므로 변수에 담을 수 있습니다.
✅ 4. lambda (익명 함수)
double = lambda x: x * 2
print(double(5))
🖨️ 출력 결과:
10
🔍 해설:
lambda
는 간단한 함수를 한 줄로 정의할 때 사용double
은 입력값을 2배로 곱해주는 함수
✅ 5. 클래스를 변수에 저장
class Cat:
def sound(self):
return "Meow"
Pet = Cat # 클래스 자체를 변수에 저장
c = Pet()
print(c.sound())
🖨️ 출력 결과:
Meow
🔍 해설:
- 클래스 자체도 변수에 저장 가능 (
Pet = Cat
) Pet()
은Cat()
과 동일한 역할 수행
✅ 6. 클래스 인스턴스를 변수에 저장
dog = Cat()
print(dog.sound())
🖨️ 출력 결과:
Meow
🔍 해설:
Cat()
은 객체(인스턴스)를 생성하고dog
이라는 변수에 저장- 객체는
.
을 사용하여 함수(메서드)를 호출할 수 있음
✅ 7. 모듈을 변수로 사용
import math
m = math
print(m.sqrt(16))
🖨️ 출력 결과:
4.0
🔍 해설:
math
모듈을m
이라는 변수에 저장해서 사용할 수 있음math.sqrt()
대신m.sqrt()
로 접근
✅ 8. 함수 안에서 함수 반환 (클로저)
def outer():
def inner():
return "I'm inner"
return inner
f = outer()
print(f())
🖨️ 출력 결과:
I'm inner
🔍 해설:
- 함수 안에서 함수를 정의하고 리턴 → 이를 클로저(closure)라고 함
outer()
실행 결과로 반환된inner
함수가f
에 저장됨
✅ 9. 표현식을 변수에 저장 (조건문, 리스트 내포)
age = 19
status = "성인" if age >= 20 else "미성년자"
print(status)
squares = [x**2 for x in range(5)]
print(squares)
🖨️ 출력 결과:
미성년자
[0, 1, 4, 9, 16]
🔍 해설:
삼항 조건문
으로 조건 결과를 저장리스트 내포
로 계산 결과를 리스트에 저장
✅ 10. 데코레이터처럼 함수 래핑해서 저장
def decorator(fn):
def wrapper():
print("Before")
fn()
print("After")
return wrapper
def hello():
print("Hello")
hello = decorator(hello)
hello()
🖨️ 출력 결과:
Before
Hello
After
🔍 해설:
- 함수
hello
를decorator
로 감싸고 변수에 다시 저장 - 변수는 이렇게 포장된 함수도 저장할 수 있음
✅ 11. 타입도 변수에 저장 가능
to_int = int
print(to_int("123"))
🖨️ 출력 결과:
123
🔍 해설:
int
,str
,float
같은 타입(자료형 변환 함수)도 변수에 담아 사용할 수 있음
✅ 12. 메서드를 변수에 저장
obj = Cat()
speak = obj.sound
print(speak())
🖨️ 출력 결과:
Meow
🔍 해설:
- 객체의 메서드를
speak
에 저장해도 함수처럼 호출 가능 obj.sound()
와 동일
✅ 총정리 표
가능한 저장 대상 | 예시 변수 | 설명 |
---|---|---|
숫자/문자/불리언 | x = 10 |
기본 자료형 |
리스트/딕셔너리 등 | lst = [1, 2, 3] |
컬렉션 |
함수 | say_hello = greet |
함수 자체 저장 가능 |
람다식 | double = lambda x: x*2 |
간단 함수 |
클래스 | Pet = Cat |
클래스 자체 저장 가능 |
인스턴스 | cat = Cat() |
객체 저장 |
모듈 | m = math |
모듈 참조 저장 |
표현식 결과 | squares = [x**2 for x in range(5)] |
결과 저장 |
메서드 | speak = obj.sound |
메서드 저장 |
자료형 함수 | to_int = int |
타입 자체 저장 가능 |
🔹 복합 대입 연산자
기존 변수의 값에 더하거나(+), 빼거나(-), 곱하거나(*), 나누는(/)
연산을 짧고 간단하게 표현하는 방법입니다.
✏️ 해석:
"변수 = 변수 + 숫자" 이렇게 길게 쓰지 말고,
"변수 += 숫자" 처럼 한 번에 적자!
◽ 대표 복합 대입 연산자 표
연산자 | 의미 | 긴 표현 | 짧은 표현 | 예시 결과 |
---|---|---|---|---|
+= |
더하고 저장 | x = x + 2 |
x += 2 |
x = 3 → 5 |
-= |
빼고 저장 | x = x - 1 |
x -= 1 |
x = 3 → 2 |
*= |
곱하고 저장 | x = x * 3 |
x *= 3 |
x = 3 → 9 |
/= |
나누고 저장 | x = x / 2 |
x /= 2 |
x = 3 → 1.5 |
</> 예시코드: 더하고 저장 (+=
)
score = 10
score += 5
print(score) # 15
</> 예시코드: 빼고 저장 (-=
)
num = 8
num -= 3 # num에서 3을 뺌
print(num) # 5
</> 예시코드: 곱하고 저장 (*=
)
count = 4
count *= 3 # count에 3을 곱함
print(count) # 12
</> 예시코드: 나누고 저장 (/=
)
length = 9
length /= 3 # length를 3으로 나눔
print(length) # 3.0
🔍 해설: 9 / 3 = 3.0 ( 나누기는 항상 소수점으로 결과가 나옴)
📝 문제1 ] 다음 코드의 출력 결과는 무엇일까요?
a = 10
b = 3
a += b # a = 10 + 3 == 13
b *= 2 # b = 3 * 2 == 6
a //= b # a = 13 // 6 == 2
b **= 2 # b = 6 * 6 == 36
a %= 5 # a = 2 % 5 == 2
print(f"a = {a}") # 2
print(f"b = {b}")
📝 문제2 ] 다음 코드의 출력 결과는 무엇일까요?
x = 8
y = 4
x *= y
y -= 1
x /= y
y **= 2
x += y
print(f"x = {x}") # x = 19.666666666666668
print(f"y = {y}") # y = 9
🔹 사용자 입력: input()
사용자에게 직접 값을 입력 받는 함수
사용자가 입력한 값은 보기에는 숫자처럼 보여도, 사실은 글자(문자열)
입니다. 그래서 숫자 계산을 하려면 '숫자로 변환(int)'을 해줘야 한다.
</> 예시코드: 기본 사용법
name = input("당신의 이름은? ")
print("안녕하세요,", name + "님!")
🖨️ 출력 결과:
당신의 이름은? 홍길동
안녕하세요, 홍길동님!
🔍 해설:
input()
함수는 사용자가 입력할 때까지 기다립니다.
사용자가 "홍길동"이라고 입력하면 name
변수에 "홍길동"
이라는 문자열이 저장됩니다.
print()
에서는 문자열끼리 이어붙이기(+
)가 가능해서 문제 없이 출력됩니다.
</> 예시코드: 숫자 입력 시 주의 (자료형 변환 필요)
age = input("나이를 입력하세요: ")
print(age, type(age)) # 입력값 확인
age = int(age) # 문자열을 정수(int)로 변환
print("10년 후 나이:", age + 10)
🖨️ 출력 결과:
나이를 입력하세요: 20
"20" <class 'str'>
10년 후 나이: 30
🔍 해설:
input()
으로 입력받으면 20이 숫자처럼 보이는 것도 사실은 문자열이고,
숫자처럼 계산하려면 int(age)
로 정수형(int) 으로 변환해줘야 합니다.
변환을 하지 않고 문자열 +
📝 문제1] 문자열 + 숫자 에러 다음 코드에서 어떤 문제가 발생하며, 어떻게 코드를 수정해야 할까요?
age = input("나이를 입력하세요: ")
print("10년 후 나이:", age + 10)
❌문제 발생 이유
input()
은 문자열을 반환하기 때문에 "20" + 10
은 타입이 다르며,
문자열과 숫자는 덧셈(+
)이 불가능해서 TypeError가 발생합니다.
⌨️ 코드수정:
age = input("나이를 입력하세요: ")
age = int(age) # 정수형으로 변환
print("10년 후 나이:", age + 10)
📝 문제2] 숫자에 50 더하기 사용자가 입력한 숫자에 50을 더해서 출력하세요.
num = input("숫자를 입력하세요: ")
✅정답:
num = input("숫자를 입력하세요: ")
num = int(num)
print("50 더한 값:", num + 50)
🖨️ 출력 결과:
숫자를 입력하세요: 30
50 더한 값: 80
📝 문제3] 문자열 연결 출력하기 사용자에게 이름과 나이를 입력받아 다음과 같이 출력되도록 하세요:
🖨️ 출력 결과:
이름: 홍길동
나이: 20
홍길동님의 나이는 20살입니다.
✅정답:
name = input("이름: ")
age = input("나이: ")
print(name + "님의 나이는 " + age + "살입니다.")
🔍 해설:
name
, age
모두 문자열(str) 상태이므로
문자열끼리는 +
로 이어 붙일 수 있습니다.
그래서 별다른 변환 없이 바로 연결해서 출력할수 있습니다.
🔹문자열을 숫자로 바꾸기
파이썬에서 숫자처럼 생긴 문자열(String)을 실제 숫자(Number)로
바꿔서 계산할 수 있습니다.
int() → 정수로 변환, float() → 소수로 변환
◽ ValueError
예외
숫자로 바꿀 수 없는 글자를 숫자로 변환하려 하면 에러가 발생합니다.
이 문제를 대비하려면 미리 예외처리를 해야 합니다.
</> 예시코드: ❌ ValueError
발생 예시
age = input("나이를 입력하세요: ") # 예: "스물다섯"
print(int(age)) # ❌ ValueError 발생
❌ 🖨️ 출력 결과: 에러출력
ValueError: invalid literal for int() with base 10: '스물다섯'
⭕ </> 코드수정: 예외처리(try ~ except
)로 안전하게 처리하기
try:
age = int(input("나이를 입력하세요: "))
print("입력한 나이:", age)
except ValueError:
print("❗ 숫자로만 입력해주시기 바랍니다.")
🖨️ 출력 결과:
나이를 입력하세요: 스물다섯
❗ 숫자로만 입력해주시기 바랍니다.
🔍 해설:
try
: 블록 안에서 에러가 발생하면,
except
: 블록으로 넘어가서 친절한 안내 문구를 출력하고 프로그램이 멈추지 않게 처리합니다.
🔹 숫자와 문자열 변환
구분 | 설명 |
---|---|
정수 변환 | int() |
실수 변환 | float() |
문자열 변환 | str() |
자료형 확인 | type() |
💬 보충설명: | |
글자처럼 생긴 숫자는 int() 나 float() 로 변환해야 계산이 가능합니다. |
|
반대로, 숫자를 글자로 출력하거나 이어 붙일 때는 str() 로 변환해야 합니다. |